home *** CD-ROM | disk | FTP | other *** search
- {
- STEFAN XENOS
-
- > I am able to load an image into a buffer and display it with PutImage ect.,
- > but I would like to load the image from disk instead of with getimage.
-
- Name: ImageStuff.Pas
- Purpose: ImageStuff is a unit for storing bitmaps in dynamic variables and
- writing them to disk.
- Progger: Stefan Xenos
-
- This unit is public domain.}
-
- Unit ImageStuff;
-
- interface
-
- Uses
- Graph;
-
- Type
- Image = Record
- BitMap : Pointer;
- Size : Word;
- end;
-
- Procedure Get(X1, Y1, X2, Y2 : Word; Var aImage : Image);
- Procedure Put(X, Y : Word; aImage : Image; BitBlt : Word);
- Procedure Kill(Var aImage : Image);
- Procedure Save(Var F : File; aImage : Image);
- Procedure Load(Var F : File; Var aImage : Image);
-
- implementation
-
- Procedure Get(X1, Y1, X2, Y2 : Word; Var aImage : Image);
- {Clips an image from the screen and store it in a dynamic variable}
- Begin
- aImage.bitmap := nil;
- aImage.size := ImageSize(X1, Y1, X2, Y2);
- GetMem(aImage.BitMap,aImage.Size); {Ask for some memory}
- GetImage(X1, Y1, X2, Y2, aImage.BitMap^); {Copy the image}
- End;
-
- Procedure Put(X, Y : Word; aImage : Image; BitBlt : Word);
- Begin
- PutImage(X, Y, aImage.BitMap^, BitBlt); {Display image}
- End;
-
- Procedure Kill(Var aImage : Image);
- {Frees up the memory used by an unwanted image}
- Begin
- FreeMem (aImage.BitMap, aImage.Size); {Free up memory used by image}
- aImage.Size := 0;
- aImage.BitMap := Nil;
- End;
-
- Procedure Save(Var F : File; aImage : Image);
- {Saves an image to disk. File MUST already be opened for write}
- Begin
- BlockWrite(F, aImage.Size, 2); {Store the image's size so that
- it may be correctly loaded later}
- BlockWrite(F, aImage.BitMap^, aImage.Size); {Write image itself to disk}
- End;
-
- Procedure Load (Var F : File; Var aImage : Image);
- {Loads an image off disk and stores it in a dynamic variable}
- Begin
- BlockRead(F, aImage.Size, 2); {Find out how big the image is}
- GetMem(aImage.BitMap, aImage.Size); {Allocate memory for it}
- BlockRead(F, aImage.BitMap^, aImage.Size) {Load the image}
- End;
-
- Begin
- End.
-
- {
- Here's some source which should help you figure out how to use the unit I
- just sent.
- }
-
- {By Stefan Xenos}
- Program ImageTest;
-
- Uses
- Graph,
- ImageStuff;
-
- Var
- Pic : Image;
- LineNum : Byte;
- DataFile : File;
- GrDriver,
- GrMode : Integer;
-
- Const
- FileName = 'IMAGE.DAT';
- MaxLines = 200;
-
- Begin
- {Initialise}
- DetectGraph(GrDriver, GrMode);
- InitGraph(GrDriver, GrMode, '');
- Randomize;
-
- {Draw some lines}
- For LineNum := 1 to MaxLines do
- begin
- setColor(random (maxcolors));
- line(random(getmaxx), random(getmaxy), random(getmaxx), random(getmaxy));
- end;
-
- {Copy image from screen}
- Get(100, 100, 150, 150, Pic);
-
- readLn;
-
- {Clear screen}
- ClearDevice;
-
- {Display image}
- Put(100, 100, Pic, NormalPut);
-
- readLn;
-
- {Clear screen}
- ClearDevice;
-
- {Save image to disk}
- Assign(DataFile, FileName);
- Rewrite(DataFile, 1);
- Save(DataFile, Pic);
- Close(DataFile);
-
- {Kill image}
- Kill(pic);
-
- {Load image from disk}
- Assign(DataFile, FileName);
- Reset(DataFile, 1);
- Load(DataFile, pic);
- Close(DataFile);
-
- {Display image}
- Put(200, 200, Pic, NormalPut);
-
- readLn;
-
- CloseGraph;
- WriteLn(Pic.size);
- End.